#include "SessionClientSurServeur.h"

SessionClientSurServeur::SessionClientSurServeur(QTcpSocket* nouvelleSocket, Serveur *serveur)
{
    this->serveur = serveur;
    this->maSocketServeur = new MaSocketServeur(nouvelleSocket, this);
    this->connecte = false;
    this->nom = "";
    this->avatar = NULL;
    connect(this, SIGNAL(sig_envoyerATous(QString)), serveur, SLOT(envoyerATous(QString)));
}

SessionClientSurServeur::~SessionClientSurServeur()
{
    if(maSocketServeur) maSocketServeur->deleteLater();
}

bool SessionClientSurServeur::getConnecte() const
{
    return connecte;
}

QString SessionClientSurServeur::getNom() const
{
    return nom;
}

void SessionClientSurServeur::recevoirEnvoyerATous(QString message)
{
    maSocketServeur->envoyerMessage(CHAT, RECEVOIR_ENVOYER_A_TOUS, message);
}

void SessionClientSurServeur::kicker()
{
    deconnexionClient();
    this->maSocketServeur->deconnecterSocket();
}

void SessionClientSurServeur::demandeConnexion(QString pseudo, QString pass)
{
    // LOCK MUTEX
    QString rep = serveur->demandeConnexion(maSocketServeur->getSocket()->peerAddress().toString(), pseudo, pass);
    if(rep == "ok")
    {
        nom = pseudo;
        connecte = true;
        maSocketServeur->envoyerMessage(NOYAU, CONNEXION_ACCEPTEE);
    }
    else
    {
        maSocketServeur->envoyerMessage(NOYAU, CONNEXION_REFUSEE, rep);
        deconnexionClient(); // Supprimer le client.
    }
    // UNLOCK MUTEX
}

void SessionClientSurServeur::demandeConnexion(QString pseudo)
{
    // LOCK MUTEX
    QString rep = serveur->demandeConnexion(maSocketServeur->getSocket()->peerAddress().toString(), pseudo);
    if(rep == "ok")
    {
        nom = pseudo;
        connecte = true;
        maSocketServeur->envoyerMessage(NOYAU, CONNEXION_ACCEPTEE);
    }
    else
    {
        maSocketServeur->envoyerMessage(NOYAU, CONNEXION_REFUSEE, rep);
        deconnexionClient(); // Supprimer le client.
    }

    // UNLOCK MUTEX
}

void SessionClientSurServeur::deconnexionClient()
{
    serveur->deconnexionClient(this);
}

void SessionClientSurServeur::envoyerATous(QString message)
{
    if(connecte) emit sig_envoyerATous("<strong>" + nom + "</strong> : " + message);
    else serveur->deconnexionClient(this);
}
